#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "../src/item.h"
#include "../src/fisica.h"
#include "../src/oceano.h"

void estatisticaVelocidade(float velMediaEsperada);

int main(int argc, char *argv[]) {
    float freq, velMedia;
        
    int semente;

    /*argumentos de entrada*/
    if (argc == 2) {
        freq = atof (argv[1]);
        velMedia = 1;
        srand (time (NULL));
    }
    else if (argc == 3) {
        freq = atof (argv[1]);
        velMedia = atof (argv[2]);
        srand (time (NULL));
    }
    else if (argc == 4) {
        freq = atof (argv[1]);
        velMedia = atof (argv[2]);
        semente = atoi (argv[3]); 
        srand (semente);
    }
    /*parametros default*/
    else {
        freq = 0.5;
        velMedia = 1;
        srand (time (NULL));
    }

    setFreqGeraPassageiro(freq);
    setMediaDaVelocidadeGerada(velMedia,0.5);

    limpaOceano ();
    inicializaVetorNaufragos();
    populaCoral(20);
    populaNaufragos(60);
    /*limpaJanela();
    imprimeOceano ();
    incrementaTempo(1);*/
    printf("<pressione ENTER para comecar>\n");
    while(getchar() != 'e' && numNaufragosNoVetor() > 0) {
	    limpaJanela();
            printf("Tempo = %d, Passageiros gerados = %d, freq_media de geracao = %g, frequencia esperada = %g\n", getTempo(), numNaufragosNovos(), numNaufragosNovos() / (float) getTempo(), freq);
	    estatisticaVelocidade(velMedia);
            imprimeOceano ();
            printf("Oque vai acontecer no proximo quadro:\n");
            calculaProximoEstadoNaufragos();	
            iteracaoParaProximoPasso();
            frequenciaGeracaoNaufrago();
	    incrementaTempo(1);
            printf("<pressione 'e' para sair da simulacao>\n");
    }
    return 0;
}

/*lista parametros pedidos para teste*/
void estatisticaVelocidade(float velMediaEsperada){
	float posx, posy, vx, vy, max, min, vel, dir, soma;
	int naufragos;
	naufrago *next, *primeiro;
	naufragos=0;
	soma=0;
	max=0;
	min=1.4;

	primeiro = nextNaufrago(); 
	next = primeiro;
	do {
		getNaufragoPosVel(next, &posx, &posy, &vx, &vy);
		euclidianoParaPolar (vx, vy, &dir, &vel);
		if(vel > max) max = vel;
		if(vel < min) min = vel;
		soma+=vel;
		naufragos++;
		next = nextNaufrago();
	} while(next != primeiro && next != NULL);
	printf("Velocida maxima = %g, minima = %g, media = %g, media esperada = %g\n", max, min, soma/(float) naufragos, velMediaEsperada);
}

